package hot;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class qisan {
//    https://leetcode.cn/problems/set-matrix-zeroes/?envType=study-plan-v2&envId=top-100-liked
public static void setZeroes(int[][] matrix) {
//    int m=matrix.length;
//    int n=matrix[0].length;
//    Set<Integer> row_zero=new HashSet<>();
//    Set<Integer> col_zero=new HashSet<>();
//    for(int i=0;i<m;i++){
//        for(int j=0;j<n;j++){
//            if(matrix[i][j]==0){
//                //相当于这个本质就是处理列的
//                row_zero.add(i);
//                //这个本质 处理行的
//                col_zero.add(j);
//            }
//        }
//    }
//    for(int i=0;i<m;i++){
//        for(int j=0;j<n;j++){
//            if(row_zero.contains(i)||col_zero.contains(j)){
//                matrix[i][j]=0;
//            }
//        }
//    }

        int m=matrix.length;
        int n=matrix[0].length;
        //先检查第一行有没有0（处理列的）
    boolean has_zero_row=false;
    boolean has_zero_col=false;
    for(int j=0;j<n;j++){
        if(matrix[0][j]==0){
            has_zero_row=true;
            break;
        }
    }
    //先检查第一列有没有0（处理行的）
    for(int i=0;i<m;i++){
        if(matrix[i][0]==0){
            has_zero_col=true;
            break;
        }
    }
    for(int i=1;i<m;i++){
        for(int j=1;j<n;j++){
            if(matrix[i][j]==0){
                //给第一行标0（处理列）
                matrix[0][j]=0;
                //给第一列标0（处理行）
                matrix[i][0]=0;

            }
        }
    }
    //置0
    for(int i=1;i<m;i++){
        for(int j=1;j<n;j++){
            if(matrix[0][j]==0||matrix[i][0]==0){
               matrix[i][j]=0;
            }
        }
    }
    if(has_zero_row){
        //处理列
        for(int j=0;j<n;j++){
            matrix[0][j]=0;
        }
    }
    if(has_zero_col){
        //处理行
        for(int i=0;i<m;i++){
            matrix[i][0]=0;
        }
    }

}

    public static void main(String[] args) {
int[][] nums={{0,1,2,0},{3,4,5,2},{1,3,1,5}};
          setZeroes(nums);
        for(int i=0;i< nums.length;i++){
            System.out.println();
            for(int j=0;j< nums[0].length;j++){
                System.out.print(nums[i][j]+" ");
            }
        }

    }
}
